# 定义变量 
# objects := main.o hello.o
# objects := main.o
# objects += hello.o
objects := main.o \
			hello.o

# 定义伪目标 =》执行目标每次都会执行下面的命令
.PHONY: clean

# 定义目标
# 目标名: 前置依赖文件列表
#    shell命令1
#    shell命令n
main: $(objects)
	gcc $(objects) -o main

# 生成main.o的目标
main.o: main.c hello.h
	gcc -c main.c -o main.o

# 生成hello.o的目标
hello.o: hello.c
	gcc -c hello.c -o hello.o

# 清理的目标
clean:
	rm main $(objects)

# 忽略错误：原本命令执行出错会终止（不会执行下一条命令），加上忽略错误，出错了还能继续向下执行
clean2:
	-rm main
	-rm main.o
	-rm hello.o